
package br.com.cinesystem.control;

import br.com.cinesystem.entity.Cinema;
import br.com.cinesystem.entity.Sala;
import br.com.cinesystem.entity.Usuario;
import br.com.cinesystem.persistence.CinemaDao;
import br.com.cinesystem.persistence.SalaDao;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class ManterSala extends HttpServlet {
   
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=ISO-8859-1");

        String cmd = request.getParameter("cmd");



            if (cmd != null){

                if (cmd.equals("cadastrar")){

                    SalaDao sd = null;

                    String destino = "sala.do?cmd=listar";
                    try{

                        sd = new SalaDao();


                        if(request.getParameter("nome").isEmpty()){

                            destino = "sala.do?cmd=form";
                            throw new Exception("*Nome e um campo obrigatorio!");

                        }else{

                            if(request.getParameter("capacidade").isEmpty()){

                                destino = "sala.do?cmd=form";
                                throw new Exception("*Capacidade e um campo obrigatorio!");

                            }else{

                                if(request.getParameter("idcinema").isEmpty()){

                                    destino = "sala.do?cmd=form";
                                    throw new Exception("*Cinema e um campo obrigatorio!");

                                }else{

                                    Sala s = new Sala();

                                    s.setCinema(new Cinema());

                                    s.setNome(request.getParameter("nome"));
                                    s.setCapacidade(Integer.parseInt(request.getParameter("capacidade")));
                                    s.getCinema().setIdCinema(Integer.parseInt(request.getParameter("idcinema")));

                                    if(sd.nomeExistente(s)){

                                        destino = "sala.do?cmd=form";
                                        throw new Exception("*Sala ja existente neste cinema!");

                                    }else{

                                        sd.salvar(s);

                                        request.setAttribute("mensagem", "*Sala cadastrada com sucesso.");
                                    }
                                }
                            }
                        }

                    }catch (Exception exc){

                        request.setAttribute("mensagem", exc.getMessage());

                    }finally{

                        request.getRequestDispatcher(destino).forward(request, response);
                    }

                }

                if (cmd.equals("alterar")){

                    SalaDao sd = null;

                    String destino = "sala.do?cmd=buscar&id="+request.getParameter("id");
                    try{

                        sd = new SalaDao();


                        if(request.getParameter("nome").isEmpty()){

                            throw new Exception("*Nome e um campo obrigatorio!");

                        }else{

                            if(request.getParameter("capacidade").isEmpty()){

                                throw new Exception("Capacidade e um campo obrigatorio!");

                            }else{

                                if(request.getParameter("idcinema").isEmpty()){

                                    throw new Exception("Cinema e um campo obrigatorio!");

                                }else{

                                    Sala s = new Sala();

                                    s.setCinema(new Cinema());

                                    s.setNome(request.getParameter("nome"));
                                    s.setCapacidade(Integer.parseInt(request.getParameter("capacidade")));
                                    s.getCinema().setIdCinema(Integer.parseInt(request.getParameter("idcinema")));
                                    s.setIdSala(Integer.parseInt(request.getParameter("idsala")));

                                    sd.alterar(s);

                                    destino = "sala.do?cmd=listar";
                                    request.setAttribute("mensagem", "Sala alterada com sucesso.");
                                }
                            }
                        }

                    }catch (Exception exc){

                        request.setAttribute("mensagem", exc.getMessage());

                    }finally{

                        request.getRequestDispatcher(destino).forward(request, response);

                    }

                }

                if (cmd.equals("excluir")){

                    SalaDao sd = null;

                    String destino = "sala.do?cmd=listar";

                    try{

                        sd = new SalaDao();

                        Sala s = new Sala();

                        s.setIdSala(Integer.parseInt(request.getParameter("id")));

                        sd.excluir(s);

                        request.setAttribute("mensagem", "*Sala desativada com sucesso.");

                    }catch (Exception exc){

                        request.setAttribute("mensagem", exc.getMessage());

                    }finally{

                        request.getRequestDispatcher(destino).forward(request, response);

                    }

                }

                if (cmd.equals("listar")){

                    SalaDao sd = null;
                    String destino = "admin/sala.jsp";
                    HttpSession session = request.getSession(true);

                    Usuario us = (Usuario) request.getSession().getAttribute("sessao");

                    if(us!=null){

                        if(us.getPerfil().equals(1)){
                            destino = "filme.do?cmd=home";
                        }
                        if(us.getPerfil().equals(2)){
                            destino = "funcionario/sala.jsp";
                        }
                        if(us.getPerfil().equals(3)){
                            destino = "admin/sala.jsp";
                        }

                    }
                    try{

                        sd = new SalaDao();

                        List<Sala> lista = sd.buscarTodos();

                        request.setAttribute("salas", lista);

                    }catch (Exception exc){

                        request.setAttribute("mensagem", exc.getMessage());

                    }finally{

                        request.getRequestDispatcher(destino).forward(request, response);

                    }

                }


                if(cmd.equals("buscar")){

                    SalaDao sd = new SalaDao();
                    CinemaDao cd = new CinemaDao();
                    String destino = "index.jsp";

                    HttpSession session = request.getSession(true);

                    Usuario us = (Usuario) request.getSession().getAttribute("sessao");

                    if(us!=null){

                        if(us.getPerfil().equals(1)){
                            destino = "filme.do?cmd=home";
                        }
                        if(us.getPerfil().equals(2)){
                            destino = "funcionario/alterar_sala.jsp";
                        }
                        if(us.getPerfil().equals(3)){
                            destino = "admin/alterar_sala.jsp";
                        }

                    }

                    try{

                        Sala sala = new Sala();

                        sala.setIdSala(Integer.parseInt(request.getParameter("id")));

                        if(us!=null){

                            sala = sd.buscar(sala);

                            List<Cinema> lista = cd.buscarTodos();

                            request.setAttribute("cinemas", lista);

                            request.setAttribute("sala", sala);

                        }else{

                            throw new Exception("*Você deve estar logado e ter permissão para esta operação!");

                        }

                    }catch (Exception exc){

                        request.setAttribute("mensagem", exc.getMessage());

                    }finally{

                        request.getRequestDispatcher(destino).forward(request, response);

                    }

            }

            if(cmd.equals("form")){

                    CinemaDao cd = null;
                    String destino = "sala.do?cmd=listar";

                    HttpSession session = request.getSession(true);

                    Usuario us = (Usuario) request.getSession().getAttribute("sessao");

                    if(us!=null){

                        if(us.getPerfil().equals(1)){
                            destino = "filme.do?cmd=home";
                        }
                        if(us.getPerfil().equals(2)){
                            destino = "funcionario/cadastro_sala.jsp";
                        }
                        if(us.getPerfil().equals(3)){
                            destino = "admin/cadastro_sala.jsp";
                        }

                    }

                    try{

                        cd = new CinemaDao();

                        if(us!=null){

                            List<Cinema> lista = cd.buscarTodos();

                            request.setAttribute("cinemas", lista);

                        }else{

                            throw new Exception("*Você deve estar logado e ter permissão para esta operação!");

                        }

                    }catch (Exception exc){

                        request.setAttribute("mensagem", exc.getMessage());

                    }finally{

                        request.getRequestDispatcher(destino).forward(request, response);

                    }

            }

        }


    } 

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    } 

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }

    @Override
    public String getServletInfo() {
        return "Short description";
    }

}
